package com.experimental.domain;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import org.beetl.sql.core.SQLReady;
import org.beetl.sql.core.annotatoin.Table;
import org.beetl.sql.experimental.iohao.core.$Mapper;
import org.beetl.sql.experimental.iohao.core.$Sql;
import org.beetl.sql.experimental.iohao.mapper.annotation.Ignore;

import java.util.List;

import static org.beetl.sql.experimental.iohao.core.SqlKit.mapper;

/**
 * <BR>
 * create time : 2017-04-05 15:48
 *
 * @author luoyizhu@gmail.com
 */


@Data
@FieldDefaults(level = AccessLevel.PRIVATE) // 属性默认都是private
//@lombok.experimental.Accessors(chain = true) // 链式编程
@Table(name = "tb_bird")
public class Bird implements $Sql { // 实现$Sql接口, 可以在对象上直接使用 save, update, delete 方法 (不是必须的)

    int id;
    /** 年龄 */
    Integer age;
    /** 名字 */
    String name;
    /** 描述 */
    String desc;

    public interface Dao extends $Mapper<Bird> {
        /** 约定使用$符号表示自己 (这句代码也不是必须的) */
        Dao $ = mapper(Dao.class);

        /**
         * 使用注解忽略默认的内置处理
         *
         * @return 查询表所有主键
         */
        @Ignore
        default List<Integer> findIds() {
            return $().execute(new SQLReady("select id from tb_bird"), Integer.class);
        }
    }
}
